package cn.lcsjsxy.yxc.incommonuse.Date;

import org.junit.jupiter.api.Test;

import java.util.Calendar;
import java.util.Date;

/*
* java.util.Calendar(日历)类
* Calendar是一个抽象基类，主用用于完成日期字段之间相互操作的功能。
* 获取Calendar实例的方法
*   》使用Calendar.getInstance()方法
*   》调用它的子类GregorianCalendar的构造器
* 一个Calendar的实例是系统时间的抽象表示，通过ger(int field)方法来取得想要的时间信息。
* 比如YEAR、MONTH、DAY_OF_WEEK、HOUR_OF_DAY、MINUTE、SECOND
*   >public void set(int field,int value)
*   >public void add(int field,int amount)
*   >public final Date getTime()
*   >public final void setTime(Date date)
* 注意“
* 获取月份时：一月是0，二月是1，以此类推，12月是11
* 获取星期时：周日是1，周一是0，周二是2，。。。。周六是7
*
* 可变性：像日期和时间这样的类应该是不可变的，danCalendar是可变的
* 偏移性：Date中的年份是从1900开始的，而月份都从0开始
* 格式化：格式化只对Date有用，Calendar则不行
* 此外，它们也不是线程安全的；不能处理闰秒等
* */
public class DateCalendar {
    /**
     * Calendar日历类（com.yang_xc.objectoriented.抽象类）的使用
     */
    @Test
    public void testCalendar(){
        //1.实例化
        //方式一：创建其子类（GregorianCalendar）的对象
        //方式二：调用其静态方法getInstance()
        Calendar calendar=Calendar.getInstance();  //方式二
//        System.out.println(calendar.getClass());

        //2.常用方法
        //get()  获取
        int days=calendar.get(Calendar.DAY_OF_MONTH);
        System.out.println(days);
        System.out.println(calendar.get(Calendar.DAY_OF_YEAR));

        //set()  修改
        calendar.set(Calendar.DAY_OF_MONTH,22);
        System.out.println(calendar.get(Calendar.DAY_OF_MONTH));

        //add()  加（减 负数）
        calendar.add(Calendar.DAY_OF_MONTH,3);
        System.out.println(calendar.get(Calendar.DAY_OF_MONTH));

        //getTime() 日历类--》Date
        Date date=calendar.getTime();  //把calendar中的值给了date  注意：是修改后的
        System.out.println(date);

        //setTime() Date--》日历类
        Date date1=new Date();
        calendar.setTime(date1);
        days=calendar.get(Calendar.DAY_OF_MONTH);
        System.out.println(days);
    }
}
